#ifndef VField_H
#define VField_H					 

#include "VCfg.h"
#include "VTreeItemType.h"

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

class VField
{
	V_COUNTER_OBJECTS(VField)
	
public:
	VField() { d = new VData;}
	VField(const QString& name) { d = new VData; d->name = name;}
	VField(const VField& field) : d(field.d) {}
	~VField() {}

	void setName(const QString &name) { d->name = name;}
	QString name() const { return d->name;}
	bool isName(const QString& name) const { return 0 == d->name.compare(name,Qt::CaseInsensitive);}
	
	void setUnicode(const QString &unicode) { d->unicode = unicode;}
	QString unicode() const { return d->unicode;}
	bool isUnicode(const QString& unicode) const { return 0 == d->unicode.compare(unicode,Qt::CaseInsensitive);}

	void setFontPtr(QFont *fontPtr) { d->fontPtr = fontPtr;}
	QFont *fontPtr() const { return d->fontPtr;}

	void setValue(const QVariant &value) { d->value = value;}
	void setValue(VTreeItemType::Enum value) { setValue(qVariantFromValue(VTreeItemType(value)));}
	QVariant value() const { return d->value;}

	virtual VField *clone() const { return new VField(*this);}
	//VField& operator = (const VField &f) { d->name = f.d->name; d->value = f.d->value; return *this;}
	//VField& operator = (const VField &f) { d = f.d; return *this;}
	
public:
	struct VData : public QSharedData 
	{
		V_COUNTER_OBJECTS(VData)
		
		QString name;
		QString unicode;
		QFont *fontPtr;
		QVariant value;

		VData()
			:fontPtr(NULL) 
		{}
		
		VData(const VData& other) 
			:QSharedData(other)
			,name(other.name)
			,unicode(other.unicode)
			,fontPtr(other.fontPtr)
			,value(other.value)
		{}
	};
	
private:	
  QSharedDataPointer<VData> d;
};

Q_DECLARE_METATYPE(VField)

///////////////////////////////////////////////////////////////////////////////

#endif
